Queue এবং Deque উভয়ই Java Collections Framework এর অংশ এবং তারা ডেটা স্ট্রাকচার হিসেবে ব্যবহার হয় যেখানে ডেটা প্রক্রিয়া করার জন্য একটি নির্দিষ্ট আদর্শ (order) অনুসরণ করা হয়। তবে, তাদের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে যা তাদের ব্যবহারের ক্ষেত্রে প্রভাব ফেলে। এখানে আমরা Queue এবং Deque এর মধ্যে পার্থক্য এবং ব্যবহার আলোচনা করব।
1. Queue (Queue Interface)
Queue একটি ডেটা স্ট্রাকচার যা FIFO (First-In-First-Out) নিয়মে কাজ করে, অর্থাৎ প্রথমে যে উপাদানটি যুক্ত হয়, সেটি প্রথমে বের হয়। এটি একটি সাধারণ লাইন বা কিউ-এর মতো কাজ করে, যেমন লাইনে দাঁড়িয়ে থাকা। যখন একটি উপাদান কিউ থেকে বের করা হয়, তখন নতুন উপাদান সেটির স্থানে যোগ করা হয়।
Queue এর বৈশিষ্ট্য:
- FIFO পদ্ধতি অনুযায়ী উপাদান বের করা হয়।
- সাধারণত, enqueue (যোগ করা) এবং dequeue (বের করা) অপারেশন থাকে।
- এটি সাধারণত Queue বা PriorityQueue এর মতো বাস্তবায়ন ব্যবহার করে।
Queue Interface এর উদাহরণ:
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
// Create a Queue using LinkedList
Queue<String> queue = new LinkedList<>();
// Add elements to the queue
queue.add("apple");
queue.add("banana");
queue.add("orange");
// Remove elements from the queue (FIFO)
System.out.println(queue.poll()); // Output: apple
System.out.println(queue.poll()); // Output: banana
}
}
এখানে, প্রথমে "apple" যোগ করা হয়েছে এবং সেটি প্রথমে বের করা হয়েছে, এটি FIFO আদর্শ অনুসরণ করে।
2. Deque (Deque Interface)
Deque (যা "Double-Ended Queue" এর সংক্ষেপ) একটি ডেটা স্ট্রাকচার যা queue এর মতো কাজ করে তবে এতে দুটি শেষ (front এবং rear) থাকে। এটি উপাদান যুক্ত এবং সরানোর জন্য দুটি দিক থেকে কাজ করতে সক্ষম (যেমন, সামনে এবং পেছনে)। এর মানে হলো, আপনি FIFO বা LIFO (Last-In-First-Out) যে কোনো পদ্ধতি অনুসরণ করে উপাদান বের করতে পারেন, যা Queue থেকে আরও উন্নত।
Deque এর বৈশিষ্ট্য:
- FIFO এবং LIFO উভয় পদ্ধতিতে উপাদান প্রক্রিয়া করা যায়।
- ডাবল এন্ডেড কিউ হওয়ায়, এটি উভয় দিক থেকে উপাদান যোগ বা সরানোর সুবিধা দেয়।
- addFirst(), addLast(), removeFirst(), এবং removeLast() এর মতো পদ্ধতি থাকে।
Deque Interface এর উদাহরণ:
import java.util.ArrayDeque;
import java.util.Deque;
public class DequeExample {
public static void main(String[] args) {
// Create a Deque using ArrayDeque
Deque<String> deque = new ArrayDeque<>();
// Add elements to the front and rear
deque.addFirst("apple");
deque.addLast("banana");
deque.addFirst("orange");
// Remove elements from the front and rear
System.out.println(deque.pollFirst()); // Output: orange (FIFO)
System.out.println(deque.pollLast()); // Output: banana (LIFO)
}
}
এখানে, Deque ব্যবহার করে উপাদান দুটি দিক থেকে যোগ এবং সরানো হয়েছে। addFirst() এবং addLast() এর মাধ্যমে উপাদান যুক্ত করা হয়েছে, এবং pollFirst() এবং pollLast() এর মাধ্যমে উপাদান সরানো হয়েছে।
Queue এবং Deque এর মধ্যে পার্থক্য
| পয়েন্ট | Queue | Deque |
|---|---|---|
| অর্থ | Queue একটি সাধারণ একমুখী (FIFO) ডেটা স্ট্রাকচার। | Deque একটি ডাবল এন্ডেড কিউ, যা উভয় দিক থেকে উপাদান প্রক্রিয়া করতে সক্ষম। |
| ডেটা প্রবাহ | FIFO পদ্ধতিতে উপাদান প্রবাহিত হয়। | FIFO বা LIFO উভয় পদ্ধতি অনুসরণ করতে পারে। |
| অপারেশন | add(), remove(), peek() | addFirst(), addLast(), removeFirst(), removeLast() |
| দিক | শুধুমাত্র একটি দিক থেকে উপাদান অ্যাক্সেস করা যায়। | উভয় দিক থেকে উপাদান অ্যাক্সেস এবং প্রক্রিয়া করা যায়। |
| ব্যবহার | সাধারণ কিউ সিস্টেম (যেমন প্রিন্টার কিউ বা লাইনে দাঁড়ানো)। | কিউ এবং স্ট্যাক উভয়ের সুবিধা, যেমন ক্যাশে সিস্টেম বা Undo operations। |
| প্রকার | সাধারণত Queue, PriorityQueue ব্যবহার হয়। | সাধারণত ArrayDeque, LinkedList ব্যবহার হয়। |
কখন Queue ব্যবহার করবেন?
- যখন আপনি একটি সাধারণ FIFO সিস্টেম তৈরি করতে চান, যেমন প্রিন্টার কিউ, লাইনে দাঁড়ানো, বা বিজ্ঞানী গবেষণার জন্য ডেটা প্রক্রিয়া।
- যখন আপনাকে উপাদানগুলো নির্দিষ্ট ক্রমে প্রক্রিয়া করতে হবে (যেমন প্রথমে আসা উপাদানকে আগে প্রক্রিয়া করা)।
কখন Deque ব্যবহার করবেন?
- যখন আপনি এমন কিউ তৈরি করতে চান যা FIFO (প্রথমে আসা, প্রথমে বের হওয়া) এবং LIFO (শেষে আসা, প্রথমে বের হওয়া) উভয় পদ্ধতিতে কাজ করতে পারে।
- যখন আপনি ডাবল এন্ডেড কিউ ব্যবহার করতে চান, যেমন Undo/Redo অপারেশন, LRU Cache, বা অন্যান্য কার্যকরী অপারেশন যেখানে উভয় দিক থেকে উপাদান বের করা দরকার।
সারাংশ
Queue এবং Deque উভয়ই জাভাতে ডেটা স্ট্রাকচার হিসেবে ব্যবহৃত হয়, তবে তাদের মধ্যে পার্থক্য হলো Queue একটি একমুখী ডেটা স্ট্রাকচার যা FIFO অনুসরণ করে, যেখানে উপাদানগুলো এক দিক থেকে প্রবাহিত হয়। অন্যদিকে, Deque একটি ডাবল এন্ডেড কিউ যা FIFO বা LIFO উভয় পদ্ধতিতে কাজ করতে সক্ষম এবং এটি উপাদানগুলোকে উভয় দিক থেকে অ্যাক্সেস এবং ম্যানিপুলেট করতে পারে।
Queue সাধারণত এমন কেসে ব্যবহার হয় যেখানে শুধুমাত্র একটি দিক থেকে উপাদান প্রবাহিত হয়, যেমন প্রিন্টার কিউ, যখন Deque ব্যবহার হয় যখন আপনাকে উভয় দিক থেকে উপাদান যুক্ত এবং সরাতে হয়, যেমন LRU Cache বা Undo/Redo operations।
Read more